package com.reload.stream;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @Date: 2024/4/24 下午4:04
 * @Version: 17
 * @Author: Reloading
 * @Description: Function 案例
 */
public class FunctionDemo {
    public static void main(String[] args) {
        // 定义一个数据提供者
        Supplier<String> supplier = () -> "22";
        // 断言 验证是否是一个数字
        Predicate<String> isNumber = str -> str.matches("-?\\d+(\\.\\d+)?");
        // 转换器 把字符串变成数字
        Function<String, Integer> function = Integer::parseInt;

        // 消费者 打印数字
        Consumer<Integer> consumer = integer -> {
            if (integer % 2 == 0) {
                System.out.println("偶数");
            } else {
                System.out.println("奇数");
            }
        };

        // 得到数字
        String numStr = supplier.get();
        // 判断是否数字
        boolean isNum = isNumber.test(numStr);
        if (isNum) {
            // 转换成数字
            Integer num = function.apply(numStr);
            // 消费数字
            consumer.accept(num);
        }else {
            // 说明不是一个数字
            System.out.println("非法的数字");
        }

        // 提取成方法
        method(supplier, isNumber, function, consumer);

        method(()->"22",
                str -> str.matches("-?\\d+(\\.\\d+)?"),
                Integer::parseInt,
                System.out::println);
    }

    private static void method(Supplier<String> supplier,
                               Predicate<String> isNumber,
                               Function<String, Integer> function,
                               Consumer<Integer> consumer) {
        if (isNumber.test(supplier.get())){
            Integer apply = function.apply(supplier.get());
            consumer.accept(apply);
        }else {
            // 说明不是一个数字
            System.out.println("非法的数字");
        }
    }
}
